package LearnAlgorithm.c_递归and查找排序;

import java.util.Arrays;
import java.util.Comparator;

/*
输入一个正整数数组,把数组里所有整数拼接起来排成一个数,
打印出能拼接出的所有数字中最小的一个
例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字为:
321323
 */
public class t乱序数组拼接所有数字成最小的新值 {
	public static void main(String[] args) {
		Integer[] arr = new Integer[] {3,32,321};
		int res = findMin(arr);
		System.out.println(res);
	}
	
	public static int findMin(Integer[] arr) {
		//自定义比较规则
		Arrays.sort(//sort用的是快排算法(sort有一个严格的阈值，阈值的不同区间使用不同的排序算法)
				arr,
				new Comparator<Integer>() {//比较器；规定arr中的两个元素要怎么比较
					@Override
					public int compare(Integer o1, Integer o2) {//我们自定义比较的方法；o1是o2
						//o1是this;o2是s
						String s1 = o1 + "" + o2; 
						String s2 = o2 + "" + o1; 
						return s1.compareTo(s2);//compareTo按照字母ascll码大小逐个比较；如s1首字母小于s2首字母，返回负数
						//返回负数，那么o1在o2前
					};
				}
				);//排序完毕
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {//逐个存入可变长字符数组
			stringBuilder.append(arr[i]);
		}
		return Integer.parseInt(stringBuilder.toString());//再转变为一个数字
	}
}
